package com.example.demo.demo.invoke;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

public class DeepSeekApiRequest {

    public static void main(String[] args) {
        // 1. 定义请求URL和API Key
        String url = "https://api.deepseek.com/chat/completions";
        // 强烈建议从配置文件或环境变量中读取，避免硬编码
        String apiKey = "sk-44ab896a57b049e1839dd2c15527fe5c"; // 替换成您的DeepSeek API Key

        // 2. 使用Hutool的JSONObject和JSONArray构建请求体
        // 这样做比使用Map更贴合JSON的结构，也更直观
        JSONObject requestBody = new JSONObject();
        requestBody.set("model", "deepseek-chat");
        requestBody.set("stream", false);

        JSONArray messages = new JSONArray();
        messages.add(new JSONObject().set("role", "system").set("content", "You are a helpful assistant."));
        messages.add(new JSONObject().set("role", "user").set("content", "写一个令我开始的故事，50字以内"));

        requestBody.set("messages", messages);

        // 3. 使用Hutool发起POST请求
        try {
            String responseBody = HttpRequest.post(url)
                    // 设置请求头
                    .header("Content-Type", "application/json")
                    .header("Authorization", "Bearer " + apiKey)
                    // 设置请求体，Hutool会自动将JSONObject转换为字符串
                    .body(requestBody.toString())
                    // 设置超时（好习惯）
                    .setConnectionTimeout(10000) // 10秒连接超时
                    .setReadTimeout(30000)       // 30秒读取超时
                    // 发送请求并获取响应体
                    .execute()
                    .body();

            // 4. 打印响应结果
            // 为了更美观地输出JSON，可以使用JSONUtil.formatJsonStr
            System.out.println("请求成功，响应内容：");
            System.out.println(JSONUtil.formatJsonStr(responseBody));

        } catch (Exception e) {
            System.err.println("请求失败，异常信息：");
            e.printStackTrace();
        }
    }
}
